]> rtime.felk.cvut.cz Git - jenkicar/testing.git/blobdiff - Motor controller/timestwo.c
Lookup table version previous to S-Function implementation.
[jenkicar/testing.git] / Motor controller / timestwo.c
diff --git a/Motor controller/timestwo.c b/Motor controller/timestwo.c
new file mode 100644 (file)
index 0000000..1555e83
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * File : timestwo.c
+ * Abstract:
+ *       An example C-file S-function for multiplying an input by 2,
+ *       y  = 2*u
+ *
+ * Real-Time Workshop note:
+ *   This file can be used as is (noninlined) with the Real-Time Workshop
+ *   C rapid prototyping targets, or it can be inlined using the Target 
+ *   Language Compiler technology and used with any target. See 
+ *     matlabroot/toolbox/simulink/blocks/tlc_c/timestwo.tlc   
+ *   the TLC code to inline the S-function.
+ *
+ * See simulink/src/sfuntmpl_doc.c
+ *
+ * Copyright 1990-2009 The MathWorks, Inc.
+ * $Revision: 1.1.6.2 $
+ */
+
+
+#define S_FUNCTION_NAME  timestwo
+#define S_FUNCTION_LEVEL 2
+
+#include "simstruc.h"
+
+/*================*
+ * Build checking *
+ *================*/
+
+
+/* Function: mdlInitializeSizes ===============================================
+ * Abstract:
+ *   Setup sizes of the various vectors.
+ */
+static void mdlInitializeSizes(SimStruct *S)
+{
+    ssSetNumSFcnParams(S, 0);
+    if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
+        return; /* Parameter mismatch will be reported by Simulink */
+    }
+
+    if (!ssSetNumInputPorts(S, 1)) return;
+    ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED);
+    ssSetInputPortDirectFeedThrough(S, 0, 1);
+
+    if (!ssSetNumOutputPorts(S,1)) return;
+    ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED);
+
+    ssSetNumSampleTimes(S, 1);
+
+    /* specify the sim state compliance to be same as a built-in block */
+    ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);
+
+    /* Take care when specifying exception free code - see sfuntmpl_doc.c */
+    ssSetOptions(S,
+                 SS_OPTION_WORKS_WITH_CODE_REUSE |
+                 SS_OPTION_EXCEPTION_FREE_CODE |
+                 SS_OPTION_USE_TLC_WITH_ACCELERATOR);
+}
+
+
+/* Function: mdlInitializeSampleTimes =========================================
+ * Abstract:
+ *    Specifiy that we inherit our sample time from the driving block.
+ */
+static void mdlInitializeSampleTimes(SimStruct *S)
+{
+    ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
+    ssSetOffsetTime(S, 0, 0.0);
+    ssSetModelReferenceSampleTimeDefaultInheritance(S); 
+}
+
+/* Function: mdlOutputs =======================================================
+ * Abstract:
+ *    y = 2*u
+ */
+static void mdlOutputs(SimStruct *S, int_T tid)
+{
+    int_T             i;
+    InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
+    real_T            *y    = ssGetOutputPortRealSignal(S,0);
+    int_T             width = ssGetOutputPortWidth(S,0);
+
+    for (i=0; i<width; i++) {
+        /*
+         * This example does not implement complex signal handling.
+         * To find out see an example about how to handle complex signal in 
+         * S-function, see sdotproduct.c for details.
+         */
+        *y++ = 2.0 *(*uPtrs[i]); 
+    }
+}
+
+
+/* Function: mdlTerminate =====================================================
+ * Abstract:
+ *    No termination needed, but we are required to have this routine.
+ */
+static void mdlTerminate(SimStruct *S)
+{
+}
+
+
+
+#ifdef  MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */
+#include "simulink.c"      /* MEX-file interface mechanism */
+#else
+#include "cg_sfun.h"       /* Code generation registration function */
+#endif